/**
 * @description 定义路由拦截器 -- 校验登录标识是否正确、是否过期
 */

import { LOGIN_FLAG } from "@/config/common.conf"
import { deCodeApi } from "@/util"
// 引入store对象
import store from '@/store'

const interceptor = function(to, _, next) {
    // debugger
    // 是否需要进行校验
    if (to.meta.nologin) {
        next()
        return
    }

    // 判断是否有登录标识--sessionStorage--也可以放在cookie
    let loginFlag = sessionStorage.getItem(LOGIN_FLAG)
    if (!loginFlag) {
        next('/login')
        return
    }
    // 对登录标识进行解密
    // 需要对登录标识进行解密--因为要保证数据安全，所以做了一个对称加密，涉及到加解密，还有切割等操作，可能有异常
    try {
        let str = deCodeApi(loginFlag)
        str = str.split('****') // 'token----timestamp
        // 首先判断是否过期
        let time = 30 * 60 * 1000
        // 当前时间-保存的时间=过去的时间
        let passTime = Date.now() - str[1]
        if (passTime > time) {
            sessionStorage.removeItem(LOGIN_FLAG)
            next('/login')
        } else {
            // 校验token的正确性---session存一份，vue存一份然后对比两个结果
            // 获取vuex中的token数据
            // const token=store.getters.token
            const token=store.getters['common/token']
            if (str[0] === token) {
                next()
            } else {
                sessionStorage.removeItem(LOGIN_FLAG)
                next('/login')
            }
        }
    } catch(e) {
        console.log(e)
        // 一旦出现异常，那么说明登录标识有问题，所以需要删除登陆标志
        sessionStorage.removeItem(LOGIN_FLAG)
        next('/login')
    }
}

export default interceptor